package com.itheima.controller;

import com.itheima.pojo.Result;
import com.itheima.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Slf4j
@RestController
public class UploadController {

        @Autowired
        private AliOSSUtils aliOSSUtils;
/*
   本地存储文件
MultipartFile，使用这个API就可以来接收到上传的文件
上传的文件是存放在一个临时目录,表单提交的三项数据(姓名、年龄、文件)，分别存储在不同的临时文件,序运行完毕之后，这个临时文件会自动删除
将这个临时文件，要转存到磁盘目录
MultipartFile 常见方法：
- String  getOriginalFilename();  //获取原始文件名
- void  transferTo(File dest);     //将接收的文件转存到磁盘文件中
- long  getSize();     //获取文件的大小，单位：字节
- byte[]  getBytes();    //获取文件内容的字节数组
- InputStream  getInputStream();    //获取接收到的文件内容的输入流

        @PostMapping("/upload")
        public Result upload(String username, Integer age, MultipartFile image) throws IOException {
            log.info("文件上传：{},{},{}",username,age,image);

            //获取原始文件名
            String originalFilename = image.getOriginalFilename();

            //将文件存储在服务器的磁盘目录。若上传相同名字，会被覆盖，要解决名字唯一性
           // image.transferTo(new File("C:\\Users\\洪哥的蓝天白云\\Desktop\\image"+originalFilename));

            //构建唯一的名字，uuid（通用唯一识别码）
            int index=originalFilename.lastIndexOf("."); //获取原始文件名后缀，前面.的位置
            String extname = originalFilename.substring(index);  //截取.后面的后缀名
            String newFileName = UUID.randomUUID().toString()+extname;
            log.info("新的文件名：{}",newFileName);
            image.transferTo(new File("C:\\Users\\洪哥的蓝天白云\\Desktop\\image\\"+newFileName));   //image文件后不要忘记加//
            return Result.success();
        }
        */

        @PostMapping("/upload")
        public Result upload(MultipartFile image) throws IOException {
                log.info("文件上传，文件名+{}",image.getOriginalFilename());
                //调用阿里云oss工具类进行文件上传
                String url = aliOSSUtils.upload(image);
                log.info("文件上传完成，文件访问的URL：{}",url);

                return Result.success(url);
        }

}
